package com.falidos.modelo.dao;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.LinkedList;

import com.falidos.modelo.artefatos.Artefato;
import com.falidos.modelo.artefatos.Usuario;
import com.falidos.utilidades.conexao.Conexao;

public class UsuarioDAO extends DAO {

	@Override
	public boolean cadastrar(Artefato artefato) {
		Usuario usuario = (Usuario) artefato;
		Connection con = Conexao.obterInstancia().getConexao();
		String sql = "INSERT INTO usuarios(usuario, senha, endereco, telFixo, telCel, categoria)" +
					 "VALUES('" + usuario.getUsuario() + "'," +
							"'" + usuario.getSenha() + "'," +
							"'" + usuario.getEndereco() + "'," +
							"'" + usuario.getTelFixo() + "'," +
							"'" + usuario.getTelCel() + "'," +
							"'Cliente')";
		try {
			Statement st = con.createStatement();
			int mod = st.executeUpdate(sql);
			if(mod != 0)
				return true;
			else
				return false;
		} catch (SQLException e) {			
			e.printStackTrace();
		}
		return false;
	}

	@Override
	public boolean alterar(Artefato artefato) {
		Usuario usuario = (Usuario) artefato;
		Connection con = Conexao.obterInstancia().getConexao();
		String sql = "UPDATE usuarios SET" +
				     " senha = '" + usuario.getSenha() +
				     "', endereco = '" + usuario.getEndereco() +
				     "', telfixo = '" + usuario.getTelFixo() + 
				     "', telcel = '" + usuario.getTelCel() +
				     "', categoria = '" + usuario.getCategoria() +
				     "' WHERE id = " + usuario.getId();
		try {
			Statement st = con.createStatement();
			int mod = st.executeUpdate(sql);
			if(mod != 0)
				return true;
			else
				return false;
		} catch (SQLException e) {			
			e.printStackTrace();
		}
		return false;		
	}

	@Override
	public boolean excluir(Artefato artefato) {
		Usuario usuario = (Usuario) artefato;
		Connection con = Conexao.obterInstancia().getConexao();
		String sql = "DELETE FROM usuarios WHERE id = " + usuario.getId();
		try {
			Statement st = con.createStatement();
			int mod = st.executeUpdate(sql);
			if(mod != 0)
				return true;
			else
				return false;
		} catch (SQLException e) {			
			e.printStackTrace();
		}
		return false;
	}

	public LinkedList<Usuario> pesquisar(String[] campos, String[] operador, String[] chaves, String[] operLogico) {
		Connection con = Conexao.obterInstancia().getConexao();
		LinkedList<Usuario> lista = null;
		String sql = "SELECT * FROM usuarios WHERE ";
		String operando;		
		
		for(int i = 0; i < campos.length; i++){
			if( i != 0){
				sql += " " + (i>=operLogico.length?operLogico[0]:operLogico[i-1]) + " ";
			}
			if((i>=operador.length?operador[0]:operador[i]).equalsIgnoreCase("like")){
				operando = "%";
			}else{
				operando = "";
			}
			sql += campos[i];
			sql += " ";
			sql += i>=operador.length?operador[0]:operador[i];
			sql += " '";
			sql += operando;
			sql += i>=chaves.length?chaves[0]:chaves[i];			
			sql += operando;		
			sql += "'";
		}
		try {
			Statement st = con.createStatement();
			ResultSet rs = st.executeQuery(sql);
			lista = new LinkedList<Usuario>();
			while(rs.next()){
				Usuario usuario = new Usuario();
				usuario.setCategoria(rs.getString("categoria"));
				usuario.setEndereco(rs.getString("endereco"));
				usuario.setId(rs.getInt("id"));
				usuario.setSenha(rs.getString("senha"));
				usuario.setUsuario(rs.getString("usuario"));
				usuario.setTelCel(rs.getString("telcel"));
				usuario.setTelFixo(rs.getString("telfixo"));
				lista.add(usuario);
			}
			return lista;
		} catch (SQLException e) {			
			e.printStackTrace();
		}
		return lista;
	}
}
